//HMR: hot module replacement 热模块替换/模块热替换
//作用：一个模块发生变化，只会重新打包这一个模块（而不是打包所有模块）
//极大提升构建速度

//样式文件：可以使用HMT功能：因为style-loader内部实现了
//js文件：默认不能使用HMR功能 --> 需要修改js代码。添加支持HMR功能的代码
//注意:HMR功能对js的处理，只能处理非入口js文件的其它文件。
//html文件：默认不能使用HMR功能，同时会导致问题：html文件不能热更新~（不用做HMR功能）
//解决：修改entry入口，将html文件引入



const {
    resolve
} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    entry: ['./src/js/index.js', './src/index.html'],
    output: {
        filename: 'js/built.js',
        path: resolve(__dirname, 'build')
    },
    module: {
        rules: [{
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            }, {
                //默认处理不了html中img
                test: /\.(jpg|png|gif)$/,
                loader: 'url-loader',
                options: {
                    //图片小于8kb会转为base64
                    limit: 8 * 1024,
                    //问题：因为url-loader默认使用es6模块化解析，而html-loader引入图片是common.js
                    //解析是会出问题：[object Module]
                    //解决：关闭url-loader的es6模块化，使用commonjs解析
                    esModule: false,
                    name: '[hash:10].[ext]',
                    outputPath: 'imgs'

                }
            }, {
                test: /\.html$/,
                //处理html文件的img图片（负责引入img，从而能被url-loader进行处理）
                loader: 'html-loader',
            },
            {
                exclude: /\.(js|css|html|less|jpg|png|gif)/,
                loader: 'file-loader',
                options: {
                    limit: 8 * 1024,
                    name: '[hash:10].[ext]',
                    outputPath: 'media'
                },

            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })
    ],
    mode: 'development',

    devServer: {
        contentBase: resolve(__dirname, 'build'),
        compress: true,
        port: 3000,
        open: true,
        //开启HMR功能
        //当修改了webpack配置，新配置要想生效，必须重新webpack服务
        hot: true
    }
}